# 管道对脚本 - 管理上下管道和得分区域
extends Node2D

# 管道移动速度
@export var speed: float = 200.0

# 管道间隙配置
@export_group("管道间隙设置")
@export var gap_size: float = 150.0  # 基础间隙大小
@export var gap_size_min: float = 120.0  # 最小间隙大小
@export var gap_size_max: float = 200.0  # 最大间隙大小
@export var gap_size_random: bool = true  # 是否使用随机间隙大小

# 管道尺寸配置
@export_group("管道尺寸设置")
@export var pipe_height: float = 480.0  # 管道高度
@export var pipe_width: float = 80.0    # 管道宽度
@export var pipe_scale: float = 1.0     # 管道缩放比例

# 管道移动配置
@export_group("管道移动设置")
@export var auto_delete: bool = true    # 是否自动删除超出屏幕的管道
@export var delete_offset: float = 80.0 # 删除偏移量（管道超出屏幕多远时删除）

# 管道是否应该移动
var should_move: bool = true

# 节点引用
@onready var top_pipe: StaticBody2D = $TopPipe
@onready var bottom_pipe: StaticBody2D = $BottomPipe
@onready var score_area: Area2D = $ScoreArea

func _ready():
	# 设置管道位置
	setup_pipes()
	
	# 设置得分区域
	setup_score_area()
	
	# 将管道对添加到管道组中，便于管理
	add_to_group("pipes")

func _physics_process(delta):
	# 只有在应该移动时才移动管道
	if should_move:
		# 整个管道对向左移动
		position.x -= speed * delta
		
		# 调试信息：显示管道位置（减少输出频率）
		# if int(position.x) % 100 == 0:
		# 	print("管道对位置: ", position.x)
		
		# 如果管道对完全移出屏幕左侧，删除它
		if auto_delete and position.x < -delete_offset:
			print("删除管道对，位置: ", position.x, " (删除偏移量: ", delete_offset, ")")
			queue_free()

func setup_pipes():
	# 计算实际的间隙大小
	var actual_gap_size = calculate_gap_size()
	
	# 设置上管道位置
	top_pipe.position.y = -pipe_height / 2 - actual_gap_size / 2
	
	# 设置下管道位置
	bottom_pipe.position.y = pipe_height / 2 + actual_gap_size / 2
	
	# 设置上方管道的贴图垂直翻转
	setup_top_pipe_flip()
	
	# 更新得分区域大小
	update_score_area_size(actual_gap_size)

func calculate_gap_size() -> float:
	# 根据配置计算间隙大小
	if gap_size_random:
		# 使用随机间隙大小
		return randf_range(gap_size_min, gap_size_max)
	else:
		# 使用固定间隙大小
		return gap_size

func update_score_area_size(new_gap_size: float):
	# 更新得分区域的大小以匹配新的间隙大小
	var collision_shape = score_area.get_node("CollisionShape2D")
	if collision_shape:
		var shape = RectangleShape2D.new()
		shape.size = Vector2(50, new_gap_size)
		collision_shape.shape = shape

func setup_top_pipe_flip():
	# 获取上方管道的TextureRect节点并设置垂直翻转
	var top_texture_rect = top_pipe.get_node("TextureRect")
	if top_texture_rect:
		# 设置垂直翻转（Y轴翻转）
		top_texture_rect.flip_v = true
		print("上方管道贴图已设置为垂直翻转")
	else:
		print("警告：未找到上方管道的TextureRect节点")

func setup_score_area():
	# 设置得分区域位置和大小
	score_area.position.y = 0
	# 得分区域大小现在由update_score_area_size函数动态设置

func _on_score_area_body_entered(body):
	# 当小鸟通过管道间隙时得分
	if body.is_in_group("bird"):
		print("通过管道间隙，得分！")
		get_tree().call_group("game_manager", "add_score", 1)

# 停止管道移动
func stop_moving():
	should_move = false
	print("管道停止移动")

# 恢复管道移动
func resume_moving():
	should_move = true
	print("管道恢复移动")

# 获取管道配置信息（供生成器使用）
func get_gap_config() -> Dictionary:
	return {
		"gap_min": gap_size_min,
		"gap_max": gap_size_max,
		"pipe_height": pipe_height,
		"pipe_width": pipe_width,
		"pipe_scale": pipe_scale,
		"speed": speed,
		"auto_delete": auto_delete,
		"delete_offset": delete_offset
	}
